/**
 * 
 * Praktikum CG WP WS13/14
 * Gruppe: Andreas Rebri(andreas.rebri@haw-hamburg.de)
 * 		   Joschka Schulz(joschka.schulz@haw-hamburg.de)
 * Aufgabe : Aufgabenblatt 5
 * Verwendete Quellen: -
 */
package edu.cg1.exercises.introduction;

import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;

/**
 * Diese Klasse reprensentiert ein Dreieck, bestehend aus drei Knotenpunken 
 * und 3 Texturkoordinaten.
 */
public class Triangle {

	/**
	 * Die drei knotenpunkte des Dreiecks
	 */
	private int vertex1, vertex2, vertex3;
	private int texturCoord1,texturCoord2,texturCoord3;
	

	/**
	 * Die Dreiecksnormale
	 */
	private Vector3d normal = new Vector3d();

	public Triangle(int vertex1, int vertex2, int vertex3) {
		this.vertex1 = vertex1;
		this.vertex2 = vertex2;
		this.vertex3 = vertex3;
	}

	public Triangle(int vertex1, int vertex2, int vertex3, int texCoord1, 
                int texCoord2, int texCoord3) {
		this.vertex1 = vertex1;
		this.vertex2 = vertex2;
		this.vertex3 = vertex3;
		this.texturCoord1 = texCoord1;
		this.texturCoord2 = texCoord2;
		this.texturCoord3 = texCoord3;
	}

	public int getVertex1() {
		return vertex1;
	}

	public int getVertex2() {
		return vertex2;
	}

	public int getVertex3() {
		return vertex3;
	}

	public Vector3d getNormal() {
		return normal;
	}

	public int getTexturCoord1() {
		return texturCoord1;
	}

	public void setTexturCoord1(int texturCoord1) {
		this.texturCoord1 = texturCoord1;
	}

	public int getTexturCoord2() {
		return texturCoord2;
	}

	public void setTexturCoord2(int texturCoord2) {
		this.texturCoord2 = texturCoord2;
	}

	public int getTexturCoord3() {
		return texturCoord3;
	}

	public void setTexturCoord3(int texturCoord3) {
		this.texturCoord3 = texturCoord3;
	}
	/**
	 * Berechnung und setzung der Normale durch (pB-pA) x (pC-pA)
	 * 
	 * @param pA
	 *            erster Knoten des Dreicks
	 * @param pB
	 *            zweiter Knoten des Dreicks
	 * @param pC
	 *            dritter Knoten des Dreicks
	 */
	public void computeNormal(Point3d pA, Point3d pB, Point3d pC) {
		Vector3d vB = new Vector3d(pB);
		Vector3d vC = new Vector3d(pC);
		vB.sub(pA);
		vC.sub(pA);
		// Kreuzprodukt von Vektor B und Vektor C
		normal.cross(vB, vC);
		normal.normalize();
	}
}
